home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / MNetsrc.hqx / Mac TCP_IP Source v.33 / arpdump.c < prev    next >
C/C++ Source or Header  |  1989-02-22  |  3KB  |  107 lines

  1. #include <stdio.h>
  2. #include "global.h"
  3. #include "mbuf.h"
  4. #include "timer.h"
  5. #include "arp.h"
  6.  
  7. #ifdef MAC
  8.     extern int tcptrcflg;
  9.     extern FILE *trcwndp;
  10. #endif
  11.  
  12. arp_dump(bpp)
  13. struct mbuf **bpp;
  14. {
  15.     struct arp arp;
  16.     char *inet_ntoa();
  17.     struct arp_type *at;
  18.     int is_ip = 0;
  19.  
  20.     if(bpp == NULLBUFP || *bpp == NULLBUF)
  21.         return;
  22. #ifdef MAC
  23.     fprintf(trcwndp,"ARP: len %d",len_mbuf(*bpp));
  24.     if(ntoharp(&arp,bpp) == -1){
  25.         fprintf(trcwndp," bad packet\n");
  26.         return;
  27.     }
  28.     /* Print hardware type in Ascii if known, numerically if not */
  29.     if(arp.hardware < NHWTYPES){
  30.         at = &arp_type[arp.hardware];
  31.         fprintf(trcwndp," hwtype %s",arptypes[arp.hardware]);
  32.     } else {
  33.         at = NULLATYPE;
  34.         fprintf(trcwndp," hwtype %u",arp.hardware);
  35.     }
  36.     /* Print hardware length only if unknown type, or if it doesn't match
  37.      * the length in the known types table
  38.      */
  39.     if(at == NULLATYPE || arp.hwalen != at->hwalen)
  40.         fprintf(trcwndp," hwlen %u",arp.hwalen);
  41.  
  42.     /* Check for most common case -- upper level protocol is IP */
  43.     if(at != NULLATYPE && arp.protocol == at->iptype){
  44.         fprintf(trcwndp," prot IP");
  45.         is_ip = 1;
  46.     } else {
  47.         fprintf(trcwndp," prot 0x%x prlen %u",arp.protocol,arp.pralen);
  48.     }
  49.     switch(arp.opcode){
  50.     case ARP_REQUEST:
  51.         fprintf(trcwndp," op REQUEST");
  52.         break;
  53.     case ARP_REPLY:
  54.         fprintf(trcwndp," op REPLY");
  55.         break;
  56.     default:
  57.         fprintf(trcwndp," op %u",arp.opcode);
  58.         break;
  59.     }
  60.     if(is_ip)
  61.         fprintf(trcwndp," target %s",inet_ntoa(arp.tprotaddr));
  62.     fprintf(trcwndp,"\n");
  63. #else
  64.     printf("ARP: len %d",len_mbuf(*bpp));
  65.     if(ntoharp(&arp,bpp) == -1){
  66.         printf(" bad packet\n");
  67.         return;
  68.     }
  69.     /* Print hardware type in Ascii if known, numerically if not */
  70.     if(arp.hardware < NHWTYPES){
  71.         at = &arp_type[arp.hardware];
  72.         printf(" hwtype %s",arptypes[arp.hardware]);
  73.     } else {
  74.         at = NULLATYPE;
  75.         printf(" hwtype %u",arp.hardware);
  76.     }
  77.     /* Print hardware length only if unknown type, or if it doesn't match
  78.      * the length in the known types table
  79.      */
  80.     if(at == NULLATYPE || arp.hwalen != at->hwalen)
  81.         printf(" hwlen %u",arp.hwalen);
  82.  
  83.     /* Check for most common case -- upper level protocol is IP */
  84.     if(at != NULLATYPE && arp.protocol == at->iptype){
  85.         printf(" prot IP");
  86.         is_ip = 1;
  87.     } else {
  88.         printf(" prot 0x%x prlen %u",arp.protocol,arp.pralen);
  89.     }
  90.     switch(arp.opcode){
  91.     case ARP_REQUEST:
  92.         printf(" op REQUEST");
  93.         break;
  94.     case ARP_REPLY:
  95.         printf(" op REPLY");
  96.         break;
  97.     default:
  98.         printf(" op %u",arp.opcode);
  99.         break;
  100.     }
  101.     if(is_ip)
  102.         printf(" target %s",inet_ntoa(arp.tprotaddr));
  103.     printf("\n");
  104. #endif
  105. }
  106.  
  107.